﻿// 3723. 字符串查询.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <string>
#include <vector>
#include <memory.h>

using namespace std;
/*
https://www.acwing.com/problem/content/3726/

给你单词 S和 Q个询问。

每次询问，你会得到正整数 A,B,C和 D。

我们令单词 X由 S 的第 A 到 B个字母组成，单词 Y由 S 的第 C到 D 个字母组成。

你需要回答，是否能够重新排列单词 Y中的字母，得到单词 X。

输入格式
第一行一个单词 S，仅由小写字母组成。

第二行一个正整数 Q。

接下来 Q行，每行四个整数 A,B,C,D。

输出格式
每次询问，如果能，输出 DA，否则输出 NE。

数据范围
1≤|S|≤50000
,
1≤Q≤50000
,
1≤A≤B≤|S|
,
1≤C≤D≤|S|
,
B−A=D−C
输入样例：
kileanimal
2
2 2 7 7
1 4 4 7
输出样例：
DA
NE
*/

const int  N = 50010;
int hashArr[N][26];
string str;
int Q,a,b,c,d;

void init() {
	for (int i = 1; i < str.size(); i++) {
		memcpy(hashArr[i], hashArr[i - 1], sizeof hashArr[0][0] * 26);
		int t = str[i] - 'a';
		hashArr[i][t]++;
	}

	return ;
}

vector<int> GetTable(int b, int a) {
	vector<int> res(26, 0);

	for (int i = 0; i < 26; i++) {
		res[i] = hashArr[b][i] - hashArr[a][i];
	}

	return res;
}

int main()
{
	cin >> str;
	cin >> Q;
	str.insert(str.begin(), '#');
	init();
	while (Q--) {
		cin >> a >> b >> c >> d;
		a; b; c; d;
		if (b - a != d - c) {
			cout << "NE" << endl;
			continue;
		}

		vector<int> va = GetTable(b,a-1);
		vector<int> vb = GetTable(d, c - 1);
		int flag = 1;
		for (int i = 0; i < 26; i++) {
			if (va[i] != vb[i]) {
				flag = 0; break;
			}
		}
		if (flag == 0) {
			cout << "NE" << endl;
		}
		else {
			cout << "DA" << endl;
		}
	}


	return 0;
}
 